#include "server.hpp"

#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASS ""
#define DBNAME "gobang"

void mysql_test(){
    MYSQL* mysql = mysql_util::mysql_create(HOST,USER,PASS,DBNAME,PORT);

    const char* sql = "insert stu values(null,'小红',18,90,80,92);";
    bool ret = mysql_util::mysql_exec(mysql,sql);
    if(ret == false){
        return ;
    }

    mysql_util::mysql_destroy(mysql);
}

void json_test(){
    std::string body;
    Json::Value root;
    root["姓名"] = "小明";
    root["年龄"] = 18;
    root["成绩"].append(99);
    root["成绩"].append(88.5);
    root["成绩"].append(77);
    json_util::serialize(root,body);
    DLOG("%s",body.c_str());

    Json::Value val;
    json_util::unserialize(body,val);
    std::cout << "姓名 " << val["姓名"].asString() << std::endl;
    std::cout << "年龄 " << val["年龄"].asInt() << std::endl;
    int sz = val["成绩"].size();
    for(int i = 0; i < sz; i++){
        std::cout << "成绩 " << val["成绩"][i].asFloat() << std::endl;
    }
   
}

void str_test(){
    std::string str = "123,,234,456";
    std::vector<std::string> array;
    str_util::split(str,",",array);

    for(auto s : array){
        DLOG("%s",s.c_str());
    }
}

void file_test(){
    std::string filename = "./makefile";
    std::string body;
    file_util::read(filename,body);
 
    std::cout << body << std::endl;
}

void db_test(){
    user_table ut(HOST,USER,PASS,DBNAME,PORT);
    Json::Value user;
    user["username"] = "fall";
    user["password"] = "986989254"; // 这里用的是明文
    //ut.insert(user);

    bool ret = ut.login(user);
    if(ret == false){
        DLOG("login failed!");
    }

    // bool ret = ut.select_by_name("xxx",user);
    // bool ret = ut.select_by_id(2,user);
    // std::string body;
    // json_util::serialize(user,body);
    // DLOG("%s",body.c_str()); // DLOG(body)不行，因为DLOG(str)中的str需为常字符串 但是如果body为常字符串就不能作为参数接收序列化结果了 

    // bool ret = ut.win(1);
    // bool ret = ut.lose(1);

}

void online_test(){
    online_manager om;
    wsserver_t::connection_ptr conn;
    uint64_t uid = 2;
    om.enter_game_room(uid,conn);
    if(om.is_in_game_room(uid)){
        DLOG("IN GAME HALL");
    }
    else{
        DLOG("NOT IN GAME HALL");
    }

    om.exit_game_room(uid);
    if(om.is_in_game_room(uid)){
        DLOG("IN GAME HALL");
    }
    else{
        DLOG("NOT IN GAME HALL");
    }
}

void room_test(){
    user_table ut(HOST,USER,PASS,DBNAME,PORT);
    online_manager om;
    //room(3,&ut,&om);
    room_manager rm(&ut,&om);
    room_ptr rp = rm.create_room(1,2);
}

int main(){
    //online_test();

    gobang_server _server(HOST, USER, PASS, DBNAME, PORT);
    _server.start(8085);

    return 0;
}
